#include<cstdio>
#include<cstring>
#define CC(A,x) memset(A,x,sizeof(A))

const int maxnode=1100;

int chd[maxnode][4],fail[maxnode],q[maxnode],flag[maxnode];
char ch[maxnode];
int n,size,ans,f[maxnode][maxnode];

void init()
{
	CC(chd,0);
	CC(fail,0);
	CC(flag,0);
	CC(f,-1);
	f[0][0]=0;
	size=1;
	ans=-1;
}

int hash(char ch)
{
	if(ch=='A')return 0;
	if(ch=='C')return 1;
	if(ch=='T')return 2;
	if(ch=='G')return 3;
}

void insert(char *ch)
{
	int i=0,t,p=0;
	while(ch[i])
	{
		t=hash(ch[i]);
		if(chd[p][t]==0)chd[p][t]=size++;
		p=chd[p][t];
		i++;
	}
	flag[p]=1;
}

void AC()
{
	int l,r;
	l=r=1;q[1]=0;
	while(l<=r)
	{
		int t=q[l];
		l++;
		int p=0;
		for(int i=0;i<4;i++)
		{
			if(chd[t][i])
			{
                if(t>0)fail[chd[t][i]]=chd[fail[t]][i];
                r++;q[r]=chd[t][i];
                flag[chd[t][i]] |= flag[fail[chd[t][i]]];
			}
			else
			{
				if(t>0)chd[t][i]=chd[fail[t]][i];
			}
		}
	}
}

void update(int &a,int b)
{
	if(a<0||a>b)a=b;
}
void dp()
{
	int len=strlen(ch);
	for(int i=0;i<len;i++)
	{
		for(int j=0;j<size;j++)
			if(f[i][j]>=0&&flag[j]==0)
			{
				for(int k=0;k<4;k++)
				{
					int inc= (k!=hash(ch[i]));
					update(f[i+1][chd[j][k]],f[i][j]+inc);
				}
			}
	}
	for(int j=0;j<size;j++)
		if(f[len][j]>=0&&flag[j]==0)
			update(ans,f[len][j]);
}

int main()
{
	int cas=0;
	while(scanf("%d",&n),n)
	{
		cas++;
		init();
		for(int i=1;i<=n;i++)
		{
			char tem[25];
			scanf("%s",tem);
			insert(tem);
		}
		scanf("%s",ch);
		AC();
		dp();
		printf("Case %d: %d\n",cas,ans);
	}
	return 0;
}
